package model.BD;

import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Types;
import java.util.List;

import model.PuntoRuta;
import model.Viaje;
import model.Constants.EstadosViaje;

public class GeolocalizacionesDAO {

	public static String INSERT_GEOLOCALIZACIONES_STATEMENT = " insert into geolocalizaciones (fkvehiculo, fkviaje,latitud, longitud, velocidad, fecha_timestamp, fkgrupo, fkpunto_por_ruta, fkproximo_punto, proximo_punto_timestamp)"
			+ " values(?,?,?,?,?,?,?,?,?,?)";
	private static GeolocalizacionesDAO geolocalizacionesDAO;

	/** Creates a new instance of GeolocalizacionesDAO */
	private GeolocalizacionesDAO() {

	}

	public static GeolocalizacionesDAO obtenerInstancia() {
		if (geolocalizacionesDAO == null) {
			geolocalizacionesDAO = new GeolocalizacionesDAO();
			return geolocalizacionesDAO;
		} else {
			return geolocalizacionesDAO;
		}
	}

	public void insertarCoordenadas(Viaje viaje, double latitud, double longitud, int velocidad, int paradaActual, int proximaParada, long arriboProximaParada, long timestampActual) {

		ViajesDAO viajesDAO = ViajesDAO.obtenerInstancia();
		BasedeDatos bd = BasedeDatos.obtenerInstancia();
		int velocidadVehiculo = velocidad / 1000;
		try {
			if (bd.getConexion() == null) {
				bd.establecerConexion();
			}

			PreparedStatement stmt = bd.getConexion().prepareStatement(INSERT_GEOLOCALIZACIONES_STATEMENT);
			stmt.setInt(1, viaje.getVechiculo().getIdVehiculo());
			stmt.setInt(2, viaje.getIdViaje());
			stmt.setString(3, String.valueOf(latitud));
			stmt.setString(4, String.valueOf(longitud));
			stmt.setString(5, String.valueOf(velocidadVehiculo));
			stmt.setInt(6, (int) (timestampActual / 1000));
			stmt.setInt(7, viaje.getIdGrupo());
			stmt.setInt(8, paradaActual);
			stmt.setInt(9, proximaParada);
			stmt.setInt(10, (int) (arriboProximaParada / 1000));
			stmt.executeUpdate();

			System.out.println(String.format("id Vehiculo: %d - ( lat: %2$,.15f ; long: %3$,.15f )", viaje.getVechiculo().getIdVehiculo(), latitud, longitud));
		} catch (SQLException e) {
			System.out.println("GeolocalizacionesDAO.insertarCoordenadas(): Error insertando coordenadas: " + e.getMessage());
			viajesDAO.actualizarEstado(viaje.getIdViaje(), EstadosViaje.VIAJE_PENDIENTE);
		} finally {
			bd.destruir();
		}
	}
}
